ZGlmZiAtLWdpdCBhL2JvYXJkL2NlcmYyNTAvTWFrZWZpbGUgYi9ib2FyZC9jZXJmMjUwL01ha2VmaWxlCmluZGV4IGE4MDZiMTguLmIxMTFiNTEgMTAwNjQ0Ci0tLSBhL2JvYXJkL2NlcmYyNTAvTWFrZWZpbGUKKysrIGIvYm9hcmQvY2VyZjI1MC9NYWtlZmlsZQpAQCAtMjYsMTcgKzI2LDE1IEBACiBMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKIENPQkpTCTo9IGNlcmYyNTAubyBmbGFzaC5vCi1TT0JKUwk6PSBsb3dsZXZlbF9pbml0Lm8KIAotU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorU1JDUwk6PSAkKENPQkpTOi5vPS5jKQogT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCi1TT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCiAKLSQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpICQoU09CSlMpCi0JJChBUikgJChBUkZMQUdTKSAkQCAkKE9CSlMpICQoU09CSlMpCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKQorCSQoQVIpICQoQVJGTEFHUykgJEAgJChPQkpTKQogCiBjbGVhbjoKLQlybSAtZiAkKFNPQkpTKSAkKE9CSlMpCisJcm0gLWYgJChPQkpTKQogCiBkaXN0Y2xlYW46CWNsZWFuCiAJcm0gLWYgJChMSUIpIGNvcmUgKi5iYWsgJChvYmopLmRlcGVuZApkaWZmIC0tZ2l0IGEvYm9hcmQvY2VyZjI1MC9jZXJmMjUwLmMgYi9ib2FyZC9jZXJmMjUwL2NlcmYyNTAuYwppbmRleCA1OTM0NmJjLi4wNDNhZmVhIDEwMDY0NAotLS0gYS9ib2FyZC9jZXJmMjUwL2NlcmYyNTAuYworKysgYi9ib2FyZC9jZXJmMjUwL2NlcmYyNTAuYwpAQCAtMzksOCArMzksOSBAQAogCiBpbnQgYm9hcmRfaW5pdCAodm9pZCkKIHsKLQkvKiBtZW1vcnkgYW5kIGNwdS1zcGVlZCBhcmUgc2V0dXAgYmVmb3JlIHJlbG9jYXRpb24gKi8KLQkvKiBzbyB3ZSBkbyBfbm90aGluZ18gaGVyZSAqLworCS8qIFdlIGhhdmUgUkFNLCBkaXNhYmxlIGNhY2hlICovCisJZGNhY2hlX2Rpc2FibGUoKTsKKwlpY2FjaGVfZGlzYWJsZSgpOwogCiAJLyogYXJjaCBudW1iZXIgb2YgY2VyZiBQWEEgQm9hcmQgKi8KIAlnZC0+YmQtPmJpX2FyY2hfbnVtYmVyID0gTUFDSF9UWVBFX1BYQV9DRVJGOwpAQCAtNTgsMTkgKzU5LDE4IEBACiAJcmV0dXJuIDA7CiB9CiAKK2V4dGVybiB2b2lkIHB4YV9kcmFtX2luaXQodm9pZCk7CitpbnQgZHJhbV9pbml0KHZvaWQpCit7CisJcHhhX2RyYW1faW5pdCgpOworCWdkLT5yYW1fc2l6ZSA9IFBIWVNfU0RSQU1fMV9TSVpFOworCXJldHVybiAwOworfQogCi1pbnQgZHJhbV9pbml0ICh2b2lkKQordm9pZCBkcmFtX2luaXRfYmFua3NpemUodm9pZCkKIHsKIAlnZC0+YmQtPmJpX2RyYW1bMF0uc3RhcnQgPSBQSFlTX1NEUkFNXzE7CiAJZ2QtPmJkLT5iaV9kcmFtWzBdLnNpemUgPSBQSFlTX1NEUkFNXzFfU0laRTsKLQlnZC0+YmQtPmJpX2RyYW1bMV0uc3RhcnQgPSBQSFlTX1NEUkFNXzI7Ci0JZ2QtPmJkLT5iaV9kcmFtWzFdLnNpemUgPSBQSFlTX1NEUkFNXzJfU0laRTsKLQlnZC0+YmQtPmJpX2RyYW1bMl0uc3RhcnQgPSBQSFlTX1NEUkFNXzM7Ci0JZ2QtPmJkLT5iaV9kcmFtWzJdLnNpemUgPSBQSFlTX1NEUkFNXzNfU0laRTsKLQlnZC0+YmQtPmJpX2RyYW1bM10uc3RhcnQgPSBQSFlTX1NEUkFNXzQ7Ci0JZ2QtPmJkLT5iaV9kcmFtWzNdLnNpemUgPSBQSFlTX1NEUkFNXzRfU0laRTsKLQotCXJldHVybiAwOwogfQogCiAjaWZkZWYgQ09ORklHX0NNRF9ORVQKZGlmZiAtLWdpdCBhL2JvYXJkL2NlcmYyNTAvY29uZmlnLm1rIGIvYm9hcmQvY2VyZjI1MC9jb25maWcubWsKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyZDQ2YjIuLjAwMDAwMDAKLS0tIGEvYm9hcmQvY2VyZjI1MC9jb25maWcubWsKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLSMKLSMgQ2VyZiBib2FyZCB3aXRoIFBYQTI1MCBjcHUKLSMKLSMKLUNPTkZJR19TWVNfVEVYVF9CQVNFID0gMHhhMzA4MDAwMApkaWZmIC0tZ2l0IGEvYm9hcmQvY2VyZjI1MC9sb3dsZXZlbF9pbml0LlMgYi9ib2FyZC9jZXJmMjUwL2xvd2xldmVsX2luaXQuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWJmZTUzYy4uMDAwMDAwMAotLS0gYS9ib2FyZC9jZXJmMjUwL2xvd2xldmVsX2luaXQuUworKysgL2Rldi9udWxsCkBAIC0xLDQxMSArMCwwIEBACi0vKgotICogTW9zdCBvZiB0aGlzIHRha2VuIGZyb20gUmVkYm9vdCBoYWxfcGxhdGZvcm1fc2V0dXAuaCB3aXRoIGNsZWFudXAKLSAqCi0gKiBOT1RFOiBJIGhhdmVuJ3QgY2xlYW4gdGhpcyB1cCBjb25zaWRlcmFibHksIGp1c3QgZW5vdWdoIHRvIGdldCBpdAotICogcnVubmluZy4gU2VlIGhhbF9wbGF0Zm9ybV9zZXR1cC5oIGZvciB0aGUgc291cmNlLiBTZWUKLSAqIGJvYXJkL2NyYWRsZS9sb3dsZXZlbF9pbml0LlMgZm9yIGFub3RoZXIgUFhBMjUwIHNldHVwIHRoYXQgaXMKLSAqIG11Y2ggY2xlYW5lci4KLSAqCi0gKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwotICogcHJvamVjdC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKLSAqLwotCi0jaW5jbHVkZSA8Y29uZmlnLmg+Ci0jaW5jbHVkZSA8dmVyc2lvbi5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL3B4YS1yZWdzLmg+Ci0KLURSQU1fU0laRTogIC5sb25nICAgQ09ORklHX1NZU19EUkFNX1NJWkUKLQotLyogd2FpdCBmb3IgY29wcm9jZXNzb3Igd3JpdGUgY29tcGxldGUgKi8KLSAgIC5tYWNybyBDUFdBSVQgcmVnCi0gICBtcmMgIHAxNSwwLFxyZWcsYzIsYzAsMAotICAgbW92ICBccmVnLFxyZWcKLSAgIHN1YiAgcGMscGMsIzQKLSAgIC5lbmRtCi0KLQotLyoKLSAqCU1lbW9yeSBzZXR1cAotICovCi0KLS5nbG9ibCBsb3dsZXZlbF9pbml0Ci1sb3dsZXZlbF9pbml0OgotCi0JLyogU2V0IHVwIEdQSU8gcGlucyBmaXJzdCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0JbGRyCXIwLCA9R1BTUjAKLQlsZHIJcjEsID1DT05GSUdfU1lTX0dQU1IwX1ZBTAotCXN0cglyMSwgW3IwXQotCi0JbGRyCXIwLCA9R1BTUjEKLQlsZHIJcjEsID1DT05GSUdfU1lTX0dQU1IxX1ZBTAotCXN0cglyMSwgW3IwXQotCi0JbGRyCXIwLCA9R1BTUjIKLQlsZHIJcjEsID1DT05GSUdfU1lTX0dQU1IyX1ZBTAotCXN0cglyMSwgW3IwXQotCi0JbGRyCXIwLCA9R1BDUjAKLQlsZHIJcjEsID1DT05GSUdfU1lTX0dQQ1IwX1ZBTAotCXN0cglyMSwgW3IwXQotCi0JbGRyCXIwLCA9R1BDUjEKLQlsZHIJcjEsID1DT05GSUdfU1lTX0dQQ1IxX1ZBTAotCXN0cglyMSwgW3IwXQotCi0JbGRyCXIwLCA9R1BDUjIKLQlsZHIJcjEsID1DT05GSUdfU1lTX0dQQ1IyX1ZBTAotCXN0cglyMSwgW3IwXQotCi0JbGRyCXIwLCA9R1BEUjAKLQlsZHIJcjEsID1DT05GSUdfU1lTX0dQRFIwX1ZBTAotCXN0cglyMSwgW3IwXQotCi0JbGRyCXIwLCA9R1BEUjEKLQlsZHIJcjEsID1DT05GSUdfU1lTX0dQRFIxX1ZBTAotCXN0cglyMSwgW3IwXQotCi0JbGRyCXIwLCA9R1BEUjIKLQlsZHIJcjEsID1DT05GSUdfU1lTX0dQRFIyX1ZBTAotCXN0cglyMSwgW3IwXQotCi0JbGRyCXIwLCA9R0FGUjBfTAotCWxkcglyMSwgPUNPTkZJR19TWVNfR0FGUjBfTF9WQUwKLQlzdHIJcjEsIFtyMF0KLQotCWxkcglyMCwgPUdBRlIwX1UKLQlsZHIJcjEsID1DT05GSUdfU1lTX0dBRlIwX1VfVkFMCi0Jc3RyCXIxLCBbcjBdCi0KLQlsZHIJcjAsID1HQUZSMV9MCi0JbGRyCXIxLCA9Q09ORklHX1NZU19HQUZSMV9MX1ZBTAotCXN0cglyMSwgW3IwXQotCi0JbGRyCXIwLCA9R0FGUjFfVQotCWxkcglyMSwgPUNPTkZJR19TWVNfR0FGUjFfVV9WQUwKLQlzdHIJcjEsIFtyMF0KLQotCWxkcglyMCwgPUdBRlIyX0wKLQlsZHIJcjEsID1DT05GSUdfU1lTX0dBRlIyX0xfVkFMCi0Jc3RyCXIxLCBbcjBdCi0KLQlsZHIJcjAsID1HQUZSMl9VCi0JbGRyCXIxLCA9Q09ORklHX1NZU19HQUZSMl9VX1ZBTAotCXN0cglyMSwgW3IwXQotCi0JbGRyCXIwLCA9UFNTUgkJCS8qIGVuYWJsZSBHUElPIHBpbnMgKi8KLQlsZHIJcjEsID1DT05GSUdfU1lTX1BTU1JfVkFMCi0Jc3RyCXIxLCBbcjBdCi0KLQkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0JLyogRW5hYmxlIG1lbW9yeSBpbnRlcmZhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQkvKiBUaGUgc2VxdWVuY2UgYmVsb3cgaXMgYmFzZWQgb24gdGhlIHJlY29tbWVuZGVkIGluaXQgc3RlcHMgICAgICAgICovCi0JLyogZGV0YWlsZWQgaW4gdGhlIEludGVsIFBYQTI1MCBPcGVyYXRpbmcgU3lzdGVtcyBEZXZlbG9wZXJzIEd1aWRlLCAqLwotCS8qIENoYXB0ZXIgMTAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLQkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0JLyogU3RlcCAxOiBXYWl0IGZvciBhdCBsZWFzdCAyMDAgbWljcm9zZWRvbmRzIHRvIGFsbG93IGludGVybmFsICAgICAqLwotCS8qICAgICAgICAgY2xvY2tzIHRvIHNldHRsZS4gT25seSBuZWNlc3NhcnkgYWZ0ZXIgaGFyZCByZXNldC4uLiAgICAgKi8KLQkvKiAgICAgICAgIEZJWE1FOiBjYW4gYmUgb3B0aW1pemVkIGxhdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0JLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0JbGRyCXIzLCA9T1NDUgkJCS8qIHJlc2V0IHRoZSBPUyBUaW1lciBDb3VudCB0byB6ZXJvICovCi0JbW92CXIyLCAjMAotCXN0cglyMiwgW3IzXQotCWxkcglyNCwgPTB4MzAwCQkJLyogcmVhbGx5IDB4MkUxIGlzIGFib3V0IDIwMHVzZWMsICAgKi8KLQkJCQkJCS8qIHNvIDB4MzAwIHNob3VsZCBiZSBwbGVudHkgICAgICAgICovCi0xOgotCWxkcglyMiwgW3IzXQotCWNtcAlyNCwgcjIKLQliZ3QJMWIKLQotbWVtX2luaXQ6Ci0KLQlsZHIJcjEsID1NRU1DX0JBU0UJCQkvKiBnZXQgbWVtb3J5IGNvbnRyb2xsZXIgYmFzZSBhZGRyLiAqLwotCi0JLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCS8qIFN0ZXAgMmE6IEluaXRpYWxpemUgQXN5bmNocm9ub3VzIHN0YXRpYyBtZW1vcnkgY29udHJvbGxlciAgICAgICAgKi8KLQkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLQkvKiBNU0MgcmVnaXN0ZXJzOiB0aW1pbmcsIGJ1cyB3aWR0aCwgbWVtIHR5cGUgICAgICAgICAgICAgICAgICAgICAgICovCi0KLQkvKiBNU0MwOiBuQ1MoMCwxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0JbGRyCXIyLCA9Q09ORklHX1NZU19NU0MwX1ZBTAotCXN0cglyMiwgW3IxLCAjTVNDMF9PRkZTRVRdCi0JbGRyCXIyLCBbcjEsICNNU0MwX09GRlNFVF0JCS8qIHJlYWQgYmFjayB0byBlbnN1cmUgICAgICAqLwotCQkJCQkJLyogdGhhdCBkYXRhIGxhdGNoZXMgICAgICAgICovCi0JLyogTVNDMTogbkNTKDIsMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCWxkcglyMiwgPUNPTkZJR19TWVNfTVNDMV9WQUwKLQlzdHIJcjIsIFtyMSwgI01TQzFfT0ZGU0VUXQotCWxkcglyMiwgW3IxLCAjTVNDMV9PRkZTRVRdCi0KLQkvKiBNU0MyOiBuQ1MoNCw1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0JbGRyCXIyLCA9Q09ORklHX1NZU19NU0MyX1ZBTAotCXN0cglyMiwgW3IxLCAjTVNDMl9PRkZTRVRdCi0JbGRyCXIyLCBbcjEsICNNU0MyX09GRlNFVF0KLQotCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQkvKiBTdGVwIDJiOiBJbml0aWFsaXplIENhcmQgSW50ZXJmYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0JLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0JLyogTUVDUjogTWVtb3J5IEV4cGFuc2lvbiBDYXJkIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCWxkcglyMiwgPUNPTkZJR19TWVNfTUVDUl9WQUwKLQlzdHIJcjIsIFtyMSwgI01FQ1JfT0ZGU0VUXQotCWxkcglyMiwgW3IxLCAjTUVDUl9PRkZTRVRdCi0KLQkvKiBNQ01FTTA6IENhcmQgSW50ZXJmYWNlIHNsb3QgMCB0aW1pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0JbGRyCXIyLCA9Q09ORklHX1NZU19NQ01FTTBfVkFMCi0Jc3RyCXIyLCBbcjEsICNNQ01FTTBfT0ZGU0VUXQotCWxkcglyMiwgW3IxLCAjTUNNRU0wX09GRlNFVF0KLQotCS8qIE1DTUVNMTogQ2FyZCBJbnRlcmZhY2Ugc2xvdCAxIHRpbWluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQlsZHIJcjIsID1DT05GSUdfU1lTX01DTUVNMV9WQUwKLQlzdHIJcjIsIFtyMSwgI01DTUVNMV9PRkZTRVRdCi0JbGRyCXIyLCBbcjEsICNNQ01FTTFfT0ZGU0VUXQotCi0JLyogTUNBVFQwOiBDYXJkIEludGVyZmFjZSBBdHRyaWJ1dGUgU3BhY2UgVGltaW5nLCBzbG90IDAgICAgICAgICAgICAqLwotCWxkcglyMiwgPUNPTkZJR19TWVNfTUNBVFQwX1ZBTAotCXN0cglyMiwgW3IxLCAjTUNBVFQwX09GRlNFVF0KLQlsZHIJcjIsIFtyMSwgI01DQVRUMF9PRkZTRVRdCi0KLQkvKiBNQ0FUVDE6IENhcmQgSW50ZXJmYWNlIEF0dHJpYnV0ZSBTcGFjZSBUaW1pbmcsIHNsb3QgMSAgICAgICAgICAgICovCi0JbGRyCXIyLCA9Q09ORklHX1NZU19NQ0FUVDFfVkFMCi0Jc3RyCXIyLCBbcjEsICNNQ0FUVDFfT0ZGU0VUXQotCWxkcglyMiwgW3IxLCAjTUNBVFQxX09GRlNFVF0KLQotCS8qIE1DSU8wOiBDYXJkIEludGVyZmFjZSBJL08gU3BhY2UgVGltaW5nLCBzbG90IDAgICAgICAgICAgICAgICAgICAgKi8KLQlsZHIJcjIsID1DT05GSUdfU1lTX01DSU8wX1ZBTAotCXN0cglyMiwgW3IxLCAjTUNJTzBfT0ZGU0VUXQotCWxkcglyMiwgW3IxLCAjTUNJTzBfT0ZGU0VUXQotCi0JLyogTUNJTzE6IENhcmQgSW50ZXJmYWNlIEkvTyBTcGFjZSBUaW1pbmcsIHNsb3QgMSAgICAgICAgICAgICAgICAgICAqLwotCWxkcglyMiwgPUNPTkZJR19TWVNfTUNJTzFfVkFMCi0Jc3RyCXIyLCBbcjEsICNNQ0lPMV9PRkZTRVRdCi0JbGRyCXIyLCBbcjEsICNNQ0lPMV9PRkZTRVRdCi0KLQkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0JLyogU3RlcCAyYzogV3JpdGUgRkxZQ05GRyAgRklYTUU6IHdoYXQncyB0aGF0Pz8/ICAgICAgICAgICAgICAgICAgICAqLwotCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotCi0JLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCS8qIFN0ZXAgMmQ6IEluaXRpYWxpemUgVGltaW5nIGZvciBTeW5jIE1lbW9yeSAoU0RDTEswKSAgICAgICAgICAgICAgKi8KLQkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLQkvKiBCZWZvcmUgYWNjZXNzaW5nIE1EUkVGUiB3ZSBuZWVkIGEgdmFsaWQgRFJJIGZpZWxkLCBzbyB3ZSBzZXQgICAgICovCi0JLyogdGhpcyB0byBwb3dlciBvbiBkZWZhdWx0cyArIERSSSBmaWVsZCwgc2V0IFNEUkFNIGNsb2NrcyBmcmVlIHJ1bm5pbmcgKi8KLQotCWxkcglyMywgPUNPTkZJR19TWVNfTURSRUZSX1ZBTAotCWxkcglyMiwgPTB4RkZGCi0JYW5kCXIzLCByMywgIHIyCi0KLQlsZHIJcjAsIFtyMSwgI01EUkVGUl9PRkZTRVRdCi0JYmljCXIwLCByMCwgcjIKLQliaWMJcjAsIHIwLCAjKE1EUkVGUl9LMEZSRUV8TURSRUZSX0sxRlJFRXxNRFJFRlJfSzJGUkVFKQotCW9ycglyMCwgcjAsIHIzCi0KLQlzdHIJcjAsIFtyMSwgI01EUkVGUl9PRkZTRVRdCS8qIHdyaXRlIGJhY2sgTURSRUZSICAgICAgICAqLwotCi0KLQkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0JLyogU3RlcCAzOiBJbml0aWFsaXplIFN5bmNocm9ub3VzIFN0YXRpYyBNZW1vcnkgKEZsYXNoL1BlcmlwaGVyYWxzKSAqLwotCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotCS8qIEluaXRpYWxpemUgU1hDTkZHIHJlZ2lzdGVyLiBBc3NlcnQgdGhlIGVuYWJsZSBiaXRzICAgICAgICAgICAgICAgKi8KLQotCS8qIFdyaXRlIFNYTVJTIHRvIGNhdXNlIGFuIE1SUyBjb21tYW5kIHRvIGFsbCBlbmFibGVkIGJhbmtzIG9mICAgICAgKi8KLQkvKiBzeW5jaHJvbm91cyBzdGF0aWMgbWVtb3J5LiBOb3RlIHRoYXQgU1hMQ1IgbmVlZCBub3QgYmUgd3JpdHRlbiAgICovCi0JLyogYXQgdGhpcyB0aW1lLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCi0JLyogRklYTUU6IHdlIHVzZSBhc3luYyBtb2RlIGZvciBub3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCi0KLQkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0JLyogU3RlcCA0OiBJbml0aWFsaXplIFNEUkFNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotCS8qIHNldCBNRFJFRlIgYWNjb3JkaW5nIHRvIHVzZXIgZGVmaW5lIHdpdGggZXhjZXB0aW9uIG9mIGEgZmV3IGJpdHMgKi8KLQotCWxkciAgICAgcjQsID1DT05GSUdfU1lTX01EUkVGUl9WQUwKLQlsZHIJcjIsID0oTURSRUZSX0swUlVOfE1EUkVGUl9LMERCMnxNRFJFRlJfSzFSVU58TURSRUZSX0sxREIyfFwKLQkJCQkJTURSRUZSX0syUlVOIHxNRFJFRlJfSzJEQjIpCi0JYW5kCXI0LCByNCwgcjIKLQliaWMJcjAsIHIwLCByMgotCW9ycglyMCwgcjAsIHI0Ci0KLQlzdHIgICAgIHIwLCBbcjEsICNNRFJFRlJfT0ZGU0VUXSAgICAvKiB3cml0ZSBiYWNrIE1EUkVGUiAgICAgICAgKi8KLQlsZHIgICAgIHIwLCBbcjEsICNNRFJFRlJfT0ZGU0VUXQotCi0JLyogU3RlcCA0YjogZGUtYXNzZXJ0IE1EUkVGUjpTTEZSU0guICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCi0JYmljCXIwLCByMCwgIyhNRFJFRlJfU0xGUlNIKQotCXN0ciAgICAgcjAsIFtyMSwgI01EUkVGUl9PRkZTRVRdICAgIC8qIHdyaXRlIGJhY2sgTURSRUZSICAgICAgICAqLwotCWxkciAgICAgcjAsIFtyMSwgI01EUkVGUl9PRkZTRVRdCi0KLQotCS8qIFN0ZXAgNGM6IGFzc2VydCBNRFJFRlI6RTFQSU4gYW5kIEUwUElPIGFzIGRlc2lyZWQsIHNldCBLWEZSRUUgICovCi0KLQlsZHIgICAgIHI0LCA9Q09ORklHX1NZU19NRFJFRlJfVkFMCi0JbGRyCXIyLCA9KE1EUkVGUl9FMFBJTnxNRFJFRlJfRTFQSU58TURSRUZSX0swRlJFRXwgXAotCQkJTURSRUZSX0sxRlJFRSB8IE1EUkVGUl9LMkZSRUUpCi0JYW5kCXI0LCByNCwgcjIKLQlvcnIJcjAsIHIwLCByNAotCXN0ciAgICAgcjAsIFtyMSwgI01EUkVGUl9PRkZTRVRdICAgIC8qIHdyaXRlIGJhY2sgTURSRUZSICAgICAgICAqLwotCWxkciAgICAgcjAsIFtyMSwgI01EUkVGUl9PRkZTRVRdCi0KLQotCS8qIFN0ZXAgNGQ6IHdyaXRlIE1EQ05GRyB3aXRoIE1EQ05GRzpERXggZGVhc3NlcnRlZCAoc2V0IHRvIDApLCB0byAgKi8KLQkvKiAgICAgICAgICBjb25maWd1cmUgYnV0IG5vdCBlbmFibGUgZWFjaCBTRFJBTSBwYXJ0aXRpb24gcGFpci4gICAgICovCi0KLQlsZHIJcjQsID1DT05GSUdfU1lTX01EQ05GR19WQUwKLQliaWMJcjQsIHI0LCAjKE1EQ05GR19ERTB8TURDTkZHX0RFMSkKLQliaWMJcjQsIHI0LCAjKE1EQ05GR19ERTJ8TURDTkZHX0RFMykKLQlzdHIgICAgIHI0LCBbcjEsICNNRENORkdfT0ZGU0VUXQkvKiB3cml0ZSBiYWNrIE1EQ05GRyAgICAgICAgKi8KLQlsZHIgICAgIHI0LCBbcjEsICNNRENORkdfT0ZGU0VUXQotCi0KLQkvKiBTdGVwIDRlOiBXYWl0IGZvciB0aGUgY2xvY2sgdG8gdGhlIFNEUkFNcyB0byBzdGFiaWxpemUsICAgICAgICAgICovCi0JLyogICAgICAgICAgMTAwLi4yMDAgtXNlYy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCi0JbGRyCXIzLCA9T1NDUgkJCS8qIHJlc2V0IHRoZSBPUyBUaW1lciBDb3VudCB0byB6ZXJvICovCi0JbW92CXIyLCAjMAotCXN0cglyMiwgW3IzXQotCWxkcglyNCwgPTB4MzAwCQkJLyogcmVhbGx5IDB4MkUxIGlzIGFib3V0IDIwMHVzZWMsICAgKi8KLQkJCQkJCS8qIHNvIDB4MzAwIHNob3VsZCBiZSBwbGVudHkgICAgICAgICovCi0xOgotCWxkcglyMiwgW3IzXQotCWNtcAlyNCwgcjIKLQliZ3QJMWIKLQotCi0JLyogU3RlcCA0ZjogVHJpZ2dlciBhIG51bWJlciAodXN1YWxseSA4KSByZWZyZXNoIGN5Y2xlcyBieSAgICAgICAgICAqLwotCS8qICAgICAgICAgIGF0dGVtcHRpbmcgbm9uLWJ1cnN0IHJlYWQgb3Igd3JpdGUgYWNjZXNzZXMgdG8gZGlzYWJsZWQgKi8KLQkvKiAgICAgICAgICBTRFJBTSwgYXMgY29tbW9ubHkgc3BlY2lmaWVkIGluIHRoZSBwb3dlciB1cCBzZXF1ZW5jZSAgICovCi0JLyogICAgICAgICAgZG9jdW1lbnRlZCBpbiBTRFJBTSBkYXRhIHNoZWV0cy4gVGhlIGFkZHJlc3MoZXMpIHVzZWQgICAqLwotCS8qICAgICAgICAgIGZvciB0aGlzIHB1cnBvc2UgbXVzdCBub3QgYmUgY2FjaGVhYmxlLiAgICAgICAgICAgICAgICAgKi8KLQotCWxkcglyMywgPUNPTkZJR19TWVNfRFJBTV9CQVNFCi0ucmVwdCA4Ci0Jc3RyCXIyLCBbcjNdCi0uZW5kcgotCi0JLyogU3RlcCA0ZzogV3JpdGUgTURDTkZHIHdpdGggZW5hYmxlIGJpdHMgYXNzZXJ0ZWQgICAgICAgICAgICAgICAgICAqLwotCS8qICAgICAgICAgIChNRENORkc6REV4IHNldCB0byAxKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQotCWxkciAgICAgcjMsIFtyMSwgI01EQ05GR19PRkZTRVRdCi0Jb3JyCXIzLCByMywgIyhNRENORkdfREUwfE1EQ05GR19ERTEpCi0Jc3RyICAgICByMywgW3IxLCAjTURDTkZHX09GRlNFVF0KLQotCS8qIFN0ZXAgNGg6IFdyaXRlIE1ETVJTLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQotCWxkciAgICAgcjIsID1DT05GSUdfU1lTX01ETVJTX1ZBTAotCXN0ciAgICAgcjIsIFtyMSwgI01ETVJTX09GRlNFVF0KLQotCi0JLyogV2UgYXJlIGZpbmlzaGVkIHdpdGggSW50ZWwncyBtZW1vcnkgY29udHJvbGxlciBpbml0aWFsaXNhdGlvbiAgICAqLwotCi0KLQkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0JLyogRGlzYWJsZSAobWFzaykgYWxsIGludGVycnVwdHMgYXQgaW50ZXJydXB0IGNvbnRyb2xsZXIgICAgICAgICAgICAqLwotCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotaW5pdGlycXM6Ci0KLQltb3YgICAgIHIxLCAjMAkJLyogY2xlYXIgaW50LiBsZXZlbCByZWdpc3RlciAoSVJRLCBub3QgRklRKSAqLwotCWxkciAgICAgcjIsID1JQ0xSCi0Jc3RyICAgICByMSwgW3IyXQotCi0JbGRyICAgICByMiwgPUlDTVIJLyogbWFzayBhbGwgaW50ZXJydXB0cyBhdCB0aGUgY29udHJvbGxlciAgICAqLwotCXN0ciAgICAgcjEsIFtyMl0KLQotCi0JLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCS8qIENsb2NrIGluaXRpYWxpc2F0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLWluaXRjbGtzOgotCi0JLyogRGlzYWJsZSB0aGUgcGVyaXBoZXJhbCBjbG9ja3MsIGFuZCBzZXQgdGhlIGNvcmUgY2xvY2sgZnJlcXVlbmN5ICAqLwotCi0JLyogVHVybiBPZmYgQUxMIG9uLWNoaXAgcGVyaXBoZXJhbCBjbG9ja3MgZm9yIHJlLWNvbmZpZ3VyYXRpb24gICAgICAqLwotCS8qIE5vdGU6IFNlZSBsYWJlbCAnRU5BQkxFQ0xLUycgZm9yIHRoZSByZS1lbmFibGluZyAgICAgICAgICAgICAgICAgKi8KLQlsZHIgICAgIHIxLCA9Q0tFTgotCW1vdiAgICAgcjIsICMwCi0Jc3RyICAgICByMiwgW3IxXQotCi0KLQkvKiBkZWZhdWx0IHZhbHVlIGluIGNhc2Ugbm8gdmFsaWQgcm90YXJ5IHN3aXRjaCBzZXR0aW5nIGlzIGZvdW5kICAgICovCi0JbGRyICAgICByMiwgPShDQ0NSX0wyN3xDQ0NSX00yfENDQ1JfTjEwKSAgLyogREVGQVVMVDogezIwMC8yMDAvMTAwfSAqLwotCi0JLyogLi4uIGFuZCB3cml0ZSB0aGUgY29yZSBjbG9jayBjb25maWcgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAqLwotCWxkciAgICAgcjEsID1DQ0NSCi0Jc3RyICAgICByMiwgW3IxXQotCi0jaWZkZWYgUlRDCi0JLyogZW5hYmxlIHRoZSAzMktoeiBvc2NpbGxhdG9yIGZvciBSVEMgYW5kIFBvd2VyTWFuYWdlciAgICAgICAgICAgICAqLwotCi0JbGRyICAgICByMSwgPU9TQ0MKLQltb3YgICAgIHIyLCAjT1NDQ19PT04KLQlzdHIgICAgIHIyLCBbcjFdCi0KLQkvKiBOT1RFOiAgc3BpbiBoZXJlIHVudGlsIE9TQ0MuT09LIGdldCBzZXQsIG1lYW5pbmcgdGhlIFBMTCAgICAgICAgICovCi0JLyogaGFzIHNldHRsZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotNjA6Ci0JbGRyICAgICByMiwgW3IxXQotCWFuZHMgICAgcjIsIHIyLCAjMQotCWJlcSAgICAgNjBiCi0jZW5kaWYKLQotCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQkvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0JLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0JLyogU2F2ZSBTRFJBTSBzaXplICovCi0JbGRyICAgICByMSwgPURSQU1fU0laRQotCXN0cglyOCwgW3IxXQotCi0JLyogSW50ZXJydXB0IGluaXQ6IE1hc2sgYWxsIGludGVycnVwdHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCWxkcglyMCwgPUlDTVIgLyogZW5hYmxlIG5vIHNvdXJjZXMgKi8KLQltb3YJcjEsICMwCi0Jc3RyCXIxLCBbcjBdCi0KLQkvKiBGSVhNRSAqLwotCi0jZGVmaW5lIE5PREVCVUcKLSNpZmRlZiBOT0RFQlVHCi0JLypEaXNhYmxlIHNvZnR3YXJlIGFuZCBkYXRhIGJyZWFrcG9pbnRzICovCi0JbW92CXIwLCMwCi0JbWNyCXAxNSwwLHIwLGMxNCxjOCwwICAvKiBpYmNyMCAqLwotCW1jcglwMTUsMCxyMCxjMTQsYzksMCAgLyogaWJjcjEgKi8KLQltY3IJcDE1LDAscjAsYzE0LGM0LDAgIC8qIGRiY29uICovCi0KLQkvKkVuYWJsZSBhbGwgZGVidWcgZnVuY3Rpb25hbGl0eSAqLwotCW1vdglyMCwjMHg4MDAwMDAwMAotCW1jcglwMTQsMCxyMCxjMTAsYzAsMCAgLyogZGNzciAqLwotCi0jZW5kaWYKLQotCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQkvKiBFbmQgbG93bGV2ZWxfaW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLWVuZGxvd2xldmVsX2luaXQ6Ci0KLQltb3YgICAgIHBjLCBscgo=